#!/bin/bash

# 通用目录名
common_src_dirname="src"
common_script_dirname="script"
output_dirname="output"
circuit_output_dirname="circuit"

# 通用文件名
common_cst_filename="common.cst"
common_sim_gen_filename="simulate-gen.sh"
yosys_output_json_filename="yosys-output.json"
yosys_output_v_filename="yosys-output.v"
yosys_output_dot_filename_main="yosys-output"
nextpnr_output_filename="nextpnr-output.json"
pack_output_filename="pack-output.fs"

# 例程目录名
example_src_dirname="src"
example_simulate_src_dirname="sim"
example_script_dirname="script"

# 例程文件名
root_path_filename="project-root.cfg"
top_module_filename="top-module-name.cfg"
sim_module_filename="sim-module-name.cfg"

# 例程模块名
example_name=$(cat $example_script_dirname"/"$top_module_filename)

# 仿真模块名
sim_module_name=$(cat $example_script_dirname"/"$sim_module_filename)

# 部分目录
project_root_dir="$(cat $example_script_dirname"/"$root_path_filename)"
output_dir=$project_root_dir"/"$output_dirname
common_src_dir=$project_root_dir"/"$common_src_dirname
common_script_dir=$project_root_dir"/"$common_script_dirname

# 通用.v列表
common_v_find="$(find $common_src_dir -type f -name *.v)"

# 例程.v列表
example_v_find="$(find $example_src_dirname -type f -name *.v)"

# 仿真.v列表
sim_v_find="$(find $example_simulate_src_dirname -type f -name *.v)"

# 综合脚本：根据参数1确定，其为0或1，如果为空则设为0。
if [ -z "$1" ]; then
    set -- "0" "$@"
fi
synthesis_sh_filename="synthesis-"$1".sh"

rm -rf $output_dir
mkdir -p $output_dir"/"$circuit_output_dirname

# 仿真
source $common_script_dir"/"$common_sim_gen_filename

# 综合
source $common_script_dir"/"$synthesis_sh_filename

# 分割.dot
source $common_script_dir"/split-dot.sh"

# # 布线
nextpnr-gowin --json $output_dir"/"$yosys_output_json_filename --device GW1NZ-LV1QN48C6/I5 --write $output_dir"/"$nextpnr_output_filename --cst $common_script_dir"/"$common_cst_filename --verbose;

gowin_pack $output_dir"/"$nextpnr_output_filename -d GW1NZ-LV1QN48C6/I5 -o $output_dir"/"$pack_output_filename;

# 将电路加载进FPGA
openFPGALoader $output_dir"/"$pack_output_filename $2
